package com.shumei.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.shumei.dao.mapper.ULoginMapper;
import com.shumei.dao.pojo.ULogin;
import com.shumei.service.LoginService;
import com.shumei.utils.JWTUtils;
import com.shumei.vo.ErrorCode;
import com.shumei.vo.Result;
import com.shumei.vo.params.ULoginParam;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
@Slf4j
public class LoginServiceImpl implements LoginService {
    @Autowired
    ULoginMapper uLoginMapper;

    //加密盐
    private static final String slat="shumei!@#";
    @Override
    public Result login(ULoginParam uLoginParam) {

        /**
         * 1、检查参数是否合法
         * 2、根据用户名和密码去user表中查询 是否存在
         * 3、如果不存在 登入失败
         * 4、如果存在，使用jwt生成token，返回给前端
         * 5、token放入redis中、 token:user信息 设置过期时间（登入认证的时候先认证token是否合法，
         * 去redis认证是否存在)
         */
        String username = uLoginParam.getUsername();
        String password = uLoginParam.getPassword();
        log.info(username+password);
        if (StringUtils.isBlank(username) || StringUtils.isBlank(password)){
            return Result.fail(ErrorCode.PARAMS_ERROR.getCode(),ErrorCode.PARAMS_ERROR.getMsg());
        }
        String pwd = DigestUtils.md5Hex(password + slat);


        LambdaQueryWrapper<ULogin> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(ULogin::getAccountnum,username);
        queryWrapper.eq(ULogin::getPassword,pwd);
        queryWrapper.select(ULogin::getUId,ULogin::getCreateTime,ULogin::getUpdateTime);
        queryWrapper.last("limit 1");
        ULogin uLogin = uLoginMapper.selectOne(queryWrapper);


        if (uLogin == null){
            return Result.fail(ErrorCode.ACCOUNT_PWD_NOT_EXIST.getCode(),ErrorCode.ACCOUNT_PWD_NOT_EXIST.getMsg());
        }
        //登录成功，使用JWT生成token，返回token和redis中
        String token = JWTUtils.createToken(uLogin.getUId());
        /**
         * 新增一个字符串类型的值，同时设置过期时间
         * var1是key
         * var2是值
         * key存在就覆盖，不存在新增
         */
//        redisTemplate.opsForValue().set("TOKEN_"+token, JSON.toJSONString(uLogin),1, TimeUnit.DAYS);
        return Result.success(token);
    }

    @Override
    public ULogin findULoginByName(String username) {
        LambdaQueryWrapper<ULogin> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(ULogin::getAccountnum,username);
        queryWrapper.last("limit 1");
        return this.uLoginMapper.selectOne(queryWrapper);
    }

    public static void main(String[] args) {
        String pwd = DigestUtils.md5Hex(123123 + slat);
        System.out.println(pwd);
    }
}
